package com.zjsru.plan2024.oneday;

import java.util.ArrayList;
import java.util.List;

/**
 * 682. 棒球比赛
 * @Author: cookLee
 * @Date: 2024-07-29
 */
public class CalPoints {

    /**
     * 主
     * \
     * 整数 x - 表示本回合新获得分数 x
     * "+" - 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。
     * "D" - 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的分数。
     * "C" - 表示前一次得分无效，将其从记录中移除。题目数据保证记录此操作时前面总是存在一个有效的分数。
     * \
     * 输入：ops = ["5","2","C","D","+"]
     * 输出：30
     * 解释：
     * "5" - 记录加 5 ，记录现在是 [5]
     * "2" - 记录加 2 ，记录现在是 [5, 2]
     * "C" - 使前一次得分的记录无效并将其移除，记录现在是 [5].
     * "D" - 记录加 2 * 5 = 10 ，记录现在是 [5, 10].
     * "+" - 记录加 5 + 10 = 15 ，记录现在是 [5, 10, 15].
     * 所有得分的总和 5 + 10 + 15 = 30
     * \
     * 输入：ops = ["5","-2","4","C","D","9","+","+"]
     * 输出：27
     * 解释：
     * "5" - 记录加 5 ，记录现在是 [5]
     * "-2" - 记录加 -2 ，记录现在是 [5, -2]
     * "4" - 记录加 4 ，记录现在是 [5, -2, 4]
     * "C" - 使前一次得分的记录无效并将其移除，记录现在是 [5, -2]
     * "D" - 记录加 2 * -2 = -4 ，记录现在是 [5, -2, -4]
     * "9" - 记录加 9 ，记录现在是 [5, -2, -4, 9]
     * "+" - 记录加 -4 + 9 = 5 ，记录现在是 [5, -2, -4, 9, 5]
     * "+" - 记录加 9 + 5 = 14 ，记录现在是 [5, -2, -4, 9, 5, 14]
     * 所有得分的总和 5 + -2 + -4 + 9 + 5 + 14 = 27
     * \
     * @param args args
     */
    public static void main(String[] args) {
        CalPoints calPoints = new CalPoints();
        String[] operations = new String[]{"5","2","C","D","+"};
        System.out.println(calPoints.calPoints(operations));
    }

    /**
     * cal点数
     *
     * @param operations 运营
     * @return int
     */
    public int calPoints(String[] operations) {
        int ans = 0;
        List<Integer> points = new ArrayList<>();
        for (String operation : operations) {
            //长度是随时变化的
            int len = points.size();
            if ("+".equals(operation)) {
                int goal = points.get(len - 2) + points.get(len - 1);
                ans += goal;
                points.add(goal);
            } else if ("C".equals(operation)) {
                ans -= points.get(len - 1);
                points.remove(len - 1);
            } else if ("D".equals(operation)) {
                int goal = points.get(len - 1) * 2;
                ans += goal;
                points.add(goal);
            } else {
                int goal = Integer.parseInt(operation);
                ans+=goal;
                points.add(goal);
            }
        }
        return ans;
    }

}
